<?php
/**
 * Created by PhpStorm.
 * User: DRG
 * Date: 2018/5/27
 * Time: 21:39
 */

$http = new swoole_http_server("0.0.0.0",80);
//设置静态资源目录
$http->set([
    "enable_static_handler" => true,
    "document_root"         => '/home/wwwroot/thinkphp/public/static',
    'work_num' => 5,
]);
// Work启动时候  执行  需要修改thinkphp 框架的内容
$http->on('WorkerStart', function(swoole_server $server, $worker_id){
    //定义应用目录
    define('APP_PATH', __DIR__ . '/../application/');
    //加载核心文件
    require __DIR__ . '/../thinkphp/base.php';
});

$http->on('request',function ($request,$response) use ($http){
    //define('APP_PATH', __DIR__ . '/../application/');
    //加载核心文件
    //require_once __DIR__ . '/../thinkphp/base.php';
    
    //上面这种形式是不需要修改thinkphp 框架 但是 类似于php-fpm形式了 性能要求不是很高的情况下可以这么做
    $_SERVER = [];
    if(isset($request->server)) {
        foreach ($request->header as $k => $v) {
            $_SERVER[strtoupper($k)] = $v;
        }
    }
   
    if(isset($request->get)) {
        foreach ($request->get as $k => $v) {
            $_GET[$k] = $v;
        }
    }
    if(isset($request->post)) {
        foreach ($request->post as $k => $v) {
            $_POST[$k] = $v;
        }
    }
    ob_start();
    // 执行应用并响应
    try{
        //think\Container::get('app', ['APP_PATH'])   //视频是这样的  但是传递了就报错
        think\Container::get('app',[APP_PATH])->run()->send();
    }catch (\Exception $e){
            //todo
    }
    
    
    $res = ob_get_contents();
    ob_end_clean();
    //$response->cookie('duruigang','xxxxxx',time()+1800);//设置cookie
    
    $response->end($res);// 将tp 应用的内容发送到浏览器
    
    
    //使用下面的 $http->close($request->fd)   相当于php fpm的  每次重启一个   没有什么意义
    //$http->close($request->fd);// 因为执行时，当一个进程没有被关闭时，再次访问此进程，进程里面的变量不会随访问链接的变化而变化;防止 GET POST 等不会改变
    // 当PHP执行 exit()  die 时，sw 会将当前进程 关掉，重启一个进程

});

//启动服务器
$http->start();
